public class Test05 {
    public int[] missingTwo(int[] nums) {
        int tmp = 0 ;
        for(int num : nums) tmp ^= num;
        for(int i = 1 ; i <= nums.length + 2 ; i++) tmp ^= i;

        //找出a、b异或结果的位中为1的位
        int diffIndex = 0;
        while(true){
            if(((tmp >>diffIndex) & 1) == 1) break;
            diffIndex++;
        }
        //将所有的数字按照在这一位的相同或者不同划分成两个组
        int[] ret = new int[2];
        for(int num : nums){
            if(((num >> diffIndex) & 1) == 1) ret[1] ^= num;
            else ret[0] ^= num;
        }

        for(int i = 1 ; i <= nums.length + 2 ; i++){
            if(((i >> diffIndex) & 1) == 1) ret[1] ^= i;
            else ret[0] ^= i;
        }
        return ret;
    }
}
